﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace Mapping.Sistema
{
    public class MappingMateriaPrima
    {
        public static List<Entidades.Sistema.MateriaPrima> ConsultarMateriaPrima()
        {
            SqlCommand cmdMatprima = new SqlCommand();
            cmdMatprima.CommandText = "sp_ConsultarMatprima";
            cmdMatprima.CommandType = System.Data.CommandType.StoredProcedure;
            cmdMatprima.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            SqlDataReader drMatprima = cmdMatprima.ExecuteReader();
            List<Entidades.Sistema.MateriaPrima> Col_MateriaPrima = new List<Entidades.Sistema.MateriaPrima>();

            while (drMatprima.Read())
            {
                Entidades.Sistema.MateriaPrima oMateriaprima = new Entidades.Sistema.MateriaPrima();
                Entidades.Sistema.TipoMateriaPrima oTipoMateriaPrima = new Entidades.Sistema.TipoMateriaPrima();
                Entidades.Sistema.Unidad oUnidad = new Entidades.Sistema.Unidad();

                oMateriaprima.cod_materiaprima = Convert.ToInt16(drMatprima[0]);
                oMateriaprima.nombre = (drMatprima[1]).ToString();

                oTipoMateriaPrima.cod_tipo_materiaprima = Convert.ToInt16(drMatprima[2]);
                oTipoMateriaPrima.nombre = (drMatprima[3]).ToString();

                oMateriaprima.precio_unitario = Convert.ToDecimal(drMatprima[4] is DBNull ? 0 : drMatprima[4]);

                oUnidad.cod_unidad = Convert.ToInt16(drMatprima[5]);
                oUnidad.nombre = (drMatprima[6]).ToString();

                oMateriaprima.tipoMateriaPrima = oTipoMateriaPrima;
                oMateriaprima.unidad = oUnidad;
                
                Col_MateriaPrima.Add(oMateriaprima);
            }

            return Col_MateriaPrima;
        }

        public static bool AgregarMateriaPrima(Entidades.Sistema.MateriaPrima oMateriaprima, Entidades.Sistema.TipoMateriaPrima oTipoMateriaPrima, Entidades.Sistema.Unidad oUnidad)
        {
            int Maximo = 0;
            SqlCommand cmdMaxMP = new SqlCommand();
            cmdMaxMP.CommandText = "sp_ObtenerMaxMateriaPrima";
            cmdMaxMP.CommandType = System.Data.CommandType.StoredProcedure;
            cmdMaxMP.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            SqlDataReader drOrdenMaximo = cmdMaxMP.ExecuteReader();

            while (drOrdenMaximo.Read())
            {
                Maximo = Convert.ToInt32(drOrdenMaximo[0]);
            }

             Maximo = Maximo + 1;
            oMateriaprima.cod_materiaprima = Maximo;
            SqlCommand cmdMatprima = new SqlCommand();
            cmdMatprima.CommandText = "sp_AgregarMatprima";
            cmdMatprima.CommandType = System.Data.CommandType.StoredProcedure;
            cmdMatprima.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdMatprima.Parameters.Add("@cod_materiaprima", System.Data.SqlDbType.Int).Value = Maximo;
            cmdMatprima.Parameters.Add("@cod_tipo_materiaprima", System.Data.SqlDbType.Int).Value = oTipoMateriaPrima.cod_tipo_materiaprima;                                           
            cmdMatprima.Parameters.Add("@nombre", System.Data.SqlDbType.NVarChar, 50).Value = oMateriaprima.nombre;
            cmdMatprima.Parameters.Add("@precio_unitario", System.Data.SqlDbType.Decimal).Value = Convert.ToInt32(oMateriaprima.precio_unitario);
            cmdMatprima.Parameters.Add("@cod_unidad", System.Data.SqlDbType.Int).Value = oUnidad.cod_unidad;
            cmdMatprima.Parameters.Add("@demanda_anual", System.Data.SqlDbType.Int).Value = Convert.ToInt32(oMateriaprima.demanda_anual);
            cmdMatprima.ExecuteNonQuery();
            return true;
        }

       
        public static bool EliminarMateriaPrima(Entidades.Sistema.MateriaPrima oMateriaprima)
        {
            SqlCommand cmdMatprima = new SqlCommand();
            cmdMatprima.CommandText = "sp_EliminarMatprima";
            cmdMatprima.CommandType = System.Data.CommandType.StoredProcedure;
            cmdMatprima.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdMatprima.Parameters.Add("@cod_materiaprima", System.Data.SqlDbType.Int).Value = oMateriaprima.cod_materiaprima;
            cmdMatprima.ExecuteNonQuery();
            return true;
        }


        public static bool ModificarMateriaPrima(Entidades.Sistema.MateriaPrima oMateriaprima, Entidades.Sistema.TipoMateriaPrima oTipoMateriaPrima, Entidades.Sistema.Unidad oUnidad)
        {
            SqlCommand cmdMatprima = new SqlCommand();
            cmdMatprima.CommandText = "sp_ModificarMatprima";
            cmdMatprima.CommandType = System.Data.CommandType.StoredProcedure;
            cmdMatprima.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdMatprima.Parameters.Add("@cod_materiaprima", System.Data.SqlDbType.Int).Value = oMateriaprima.cod_materiaprima; ;
            cmdMatprima.Parameters.Add("@cod_tipo_materiaprima", System.Data.SqlDbType.Int).Value = oTipoMateriaPrima.cod_tipo_materiaprima;
            cmdMatprima.Parameters.Add("@nombre", System.Data.SqlDbType.NVarChar, 50).Value = oMateriaprima.nombre;
            cmdMatprima.Parameters.Add("@precio_unitario", System.Data.SqlDbType.Decimal).Value = Convert.ToInt32(oMateriaprima.precio_unitario);
            cmdMatprima.Parameters.Add("@cod_unidad", System.Data.SqlDbType.Int).Value = oUnidad.cod_unidad;
            cmdMatprima.Parameters.Add("@demanda_anual", System.Data.SqlDbType.Int).Value = Convert.ToInt32(oMateriaprima.demanda_anual);
            cmdMatprima.ExecuteNonQuery();
            return true;

        }

    }
}
